home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Graphics Plus
/
Graphics Plus.iso
/
msdos
/
raytrace
/
pov
/
patches
/
patch_ju.txt
< prev
next >
Wrap
Text File
|
1994-10-02
|
3KB
|
89 lines
Fractal sets patch. Second version.
Bugs corrected:
. Bounding slabs now work. Thank to Egon (egon@ugcs.caltech.edu) who
found the bug in 'lighting.c'. This correction may arrouse problems
with shadows one day, but until now, no one was detected. Well.
. CSG is operational, but slows even more the computations. It
can be used optionaly.
. The necessary file 'tokenize.c' was not included in the
previous archive. Unforgivable neglecting.
Pascal.
-----------------------------------------------------------------------
julia_patch_2.tar contents and description:
. 'frame.h' ( new primitive fields )
. 'parse.h' ( new tokens: julia, z3 and fractal )
. 'tokenize.c' ( new tokens spelling )
. 'parse.c' ( syntax )
. 'povproto.h' ( prototype for routines in 'julia.c' )
. 'julia.c' ( primitive routines )
. 'lighting.c' ( Lines 269 and 270 have been changed to
make bounding slabs work.)
These files should replace those in the POV-ray 2.2 sources. Add
the primitive 'julia.c' in the Makefile before re-compiling.
Syntax:
<keyword> { C.x, C.y, C.z, C.w, n, s (,csg)
USUAL_TRANSFORMATIONS
USUAL_TEXTURES
...
}
where <keyword> is either: julia, z3 or fractal.
The fractal is generated by taking the point (x,y,z,0.0) in
4D space (quaternion) and iterating a certain map, which depends
on the four parameters given by C.x, C.y, C.z and C.w.
If, after n iterations, the iterated point did not get out of
the bounding sphere (radius=2), the initial point is in the set.
For 'julia' set, the map is : z -> z^2 + C
For 'z3' set, it is: z -> z^3 + C
For 'fractal' set, the map is currently:
| x | x^2-y^2-z^2-w^2
| y | 2*w*y
| z ----> | 2*x*z + C
| w | 2*y*z
but it can be changed at will in 'julia.c'. Look at routines:
'Iteration_Fractal' and 'Normal_Calc_Fractal'...
The integer s gives the number of steps in which is a ray divided
in inside the sphere. Each point is tested, starting from eye,
until a likely intersection is detected. The higher s, the slower,
but smoother will look the set... 300 is commonly a good value.
A better algo would use distance-estimator to perform the tests,
and be much faster, but that does not work for any iteration map,
or when the initial point is *inside* the set. If someone wants to
enhance that point... I'll try when I find time :(
csg: this keyword is optional and must be used when the fractal
set takes part in a CSG operation. Because, in such case, *all*
intersection points (or at least the MAX_INTERSECTIONS first
ones. Check in file 'parse.h' if problems) must be detected.
It is therefore much slower.
Hope you'll enjoy, even if it is a slow primitive...
Pascal.
------------------------------
Pascal Massimino
Ecole Normale Superieure
45, rue d'Ulm
75005 Paris.
Pascal.Massimino@ens.fr (any comments/bugs/enhancements
welcome )
http://acacia.ens.fr:8080/home/massimin/index.ang.html